package com.ilongsay.dao;

import com.ilongsay.entity.FaPiaoDetail;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * @Author ilongsay
 * @Email ilongsay@163.com
 * @Copyright 版本所有，侵权必究！
 * @Datetime 2018-11-18 11:
 * @Describution
 */
public interface BillSqliteDetailDao {

    /**
     * @param list 传入的明细list
     * @return void
     * 插入明细信息，有id
     */
    public void insertBillDetail(List<FaPiaoDetail> list);

    /**
     * @param list 插入明细的信息不需要id
     * @return void
     * 不需要id
     */
    public void insertBillDetailNoIds(List<FaPiaoDetail> list);

    /**
     * @param
     * @return java.util.List<com.ilongsay.entity.FaPiaoDetail>
     * 查询明细信息
     */
    @Select("select * from billDetail")
    public List<FaPiaoDetail> findAllBillDetail();

    /**
     * @param
     * @return void
     * 删除sqlite中重复的数据，适合合并后再删除
     * //TODO:已经找到更好的解决办法，这里暂时不实现
     */
    public void deleteDistincBillDetail();

    /**
     * @param billCode 订单编号
     * @return java.util.List<com.ilongsay.entity.FaPiaoDetail>
     * 根据订单编号查询明细信息
     */
    @Select("select * from billDetail where billCode = #{billCode}")
    public List<FaPiaoDetail> findBillDetailByBillCode(@Param("billCode")String billCode);

    /**
     * @param newBillCode
     * @param oldBillCode
     * @return void
     * 更新明细表的订单号码
     */
    @Update("update billDetail set billCode = #{newBillCode} where billCode = #{oldBillCode}")
    public void upadateBillDetail(@Param("newBillCode") String newBillCode,
                                  @Param("oldBillCode") String oldBillCode);

    /**
     * @param billCode 订单号
     * @return void
     * 按传入的订单号删除明细信息，客户删除主表的信息之后，多条删除
     */
    public void deleteBillDetails(List<?> billCode);


    /**
     * @param billCode 订单号
     * @return void
     * 根据订单号删除明细信息，单条删除
     */
    @Delete("delete from billDetail where billCode =#{billCode}")
    public void deleteBillDetailsByBillCode(@Param("billCode") String billCode);

    /**
     * @param list 传进来的id的值
	* @param billCode 传进来的原始的billCode的数据
     * @return void
     *
     */
    public void updateByIds(@Param("list") List<String> list,
                            @Param("billCode")String billCode);

    /**
     * @param taxRate 税率
     * @param bill 传入拆分后的新的订单号码
     * @param billCode 传入的订单号码，where条件
     * @return void
     *
     */
    public void updateByTaxRates(@Param("taxRate") String taxRate,
                                 @Param("bill") String bill,
                                 @Param("billCode") String billCode);

    /**
     * @param faPiaoDetails
     * @return void
     * 批量更新所有的明细信息，暂时实现了含税金额，税额，未税金额的更新
     */
    public void updateDetailAll(FaPiaoDetail faPiaoDetails);
}
